package calculatormaxpower;

import java.awt.Color;
import java.awt.ComponentOrientation;
import java.awt.Font;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class Main implements ActionListener {

    public JFrame frame;  //frame
    public GroupLayout glLayout;
    public Font font1, font2; //elementos do frame


        public JButton btNum1; //numeros de 0 a 9
        public JButton btNum2;
        public JButton btNum3;
        public JButton btNum4;
        public JButton btNum5;
        public JButton btNum6;
        public JButton btNum7;
        public JButton btNum8;
        public JButton btNum9;
        public JButton btNum0;

        public JButton btOperAdic; //operações
        public JButton btOperSubt;
        public JButton btOperMult;
        public JButton btOperDiv;
        public JButton btOperRaiz;
        public JButton btOperPorcent;

        public JButton btFuncZerar;  //zerar, igual e decimal
        public JButton btFuncIgual;
        public JButton btFuncDecimal;

        public String strVisor; //Visor
        public Label labVisor;

        public double doubNum1, doubNum2, doubRes;  //memória
        public String strOper = new String();

    public Main() {
        getFrame();
    }

    public static void main (String[] args) {
        Main main = new Main();
    }


    public void getFrame() { //método que monta a tela

        frame = new JFrame("CALCULATOR PLUS 2");   //prorpiedades do frame
        frame.setSize(350, 330);
        glLayout = new GroupLayout(frame.getContentPane());
        frame.getContentPane().setLayout(glLayout);
        font1 = new Font("Eurostile", 0, 20);
        font2 = new Font("Eurostile", 0, 50); //propriedades dos botões



        btNum1 = new JButton("1"); //numeros de 0 a 9
        btNum1.setBounds(10, 180, 0, 0);
        btNum1.setSize(45, 45);
        btNum1.setFont(font1);
        btNum1.addActionListener(this);

        btNum2 = new JButton("2");
        btNum2.setBounds(65, 180, 0, 0);
        btNum2.setSize(45, 45);
        btNum2.setFont(font1);
        btNum2.addActionListener(this);


        btNum3 = new JButton("3");
        btNum3.setBounds(120, 180, 0, 0);
        btNum3.setSize(45, 45);
        btNum3.setFont(font1);
        btNum3.addActionListener(this);

        btNum4 = new JButton("4");
        btNum4.setBounds(10, 125, 0, 0);
        btNum4.setSize(45, 45);
        btNum4.setFont(font1);
        btNum4.addActionListener(this);

        btNum5 = new JButton("5");
        btNum5.setBounds(65, 125, 0, 0);
        btNum5.setSize(45, 45);
        btNum5.setFont(font1);
        btNum5.addActionListener(this);

        btNum6 = new JButton("6");
        btNum6.setBounds(120, 125, 0, 0);
        btNum6.setSize(45, 45);
        btNum6.setFont(font1);
        btNum6.addActionListener(this);

        btNum7 = new JButton("7");
        btNum7.setBounds(10, 70, 0, 0);
        btNum7.setSize(45, 45);
        btNum7.setFont(font1);
        btNum7.addActionListener(this);

        btNum8 = new JButton("8");
        btNum8.setBounds(65, 70, 0, 0);
        btNum8.setSize(45, 45);
        btNum8.setFont(font1);
        btNum8.addActionListener(this);

        btNum9 = new JButton("9");
        btNum9.setBounds(120, 70, 0, 0);
        btNum9.setSize(45, 45);
        btNum9.setFont(font1);
        btNum9.addActionListener(this);

        btNum0 = new JButton("0");
        btNum0.setBounds(10, 235, 0, 0);
        btNum0.setSize(100, 45);
        btNum0.setFont(font1);
        btNum0.addActionListener(this);


        btOperAdic = new JButton("+"); //operadores
        btOperAdic.setBounds(175, 70, 0, 0);
        btOperAdic.setSize(50, 45);
        btOperAdic.setFont(font1);
        btOperAdic.addActionListener(this);

        btOperSubt = new JButton("-");
        btOperSubt.setBounds(175, 125, 0, 0);
        btOperSubt.setSize(50, 45);
        btOperSubt.setFont(font1);
        btOperSubt.addActionListener(this);

        btOperMult = new JButton("X");
        btOperMult.setBounds(175, 180, 0, 0);
        btOperMult.setSize(50, 45);
        btOperMult.setFont(font1);
        btOperMult.addActionListener(this);

        btOperDiv = new JButton("/");
        btOperDiv.setBounds(175, 235, 0, 0);
        btOperDiv.setSize(50, 45);
        btOperDiv.setFont(font1);
        btOperDiv.addActionListener(this);

        btFuncZerar = new JButton("C");
        btFuncZerar.setBackground(Color.darkGray);
        btFuncZerar.setForeground(Color.WHITE);
        btFuncZerar.setBounds(230, 70, 0, 0);
        btFuncZerar.setSize(100, 45);
        btFuncZerar.setFont(font1);
        btFuncZerar.addActionListener(this);

        btOperRaiz = new JButton("v");
        btOperRaiz.setBounds(230, 125, 0, 0);
        btOperRaiz.setSize(100, 45);
        btOperRaiz.setFont(font1);
        btOperRaiz.addActionListener(this);

        btOperPorcent = new JButton("%");
        btOperPorcent.setBounds(230, 180, 0, 0);
        btOperPorcent.setSize(100, 45);
        btOperPorcent.setFont(font1);
        btOperPorcent.addActionListener(this);

        btFuncIgual = new JButton("=");
        btFuncIgual.setBackground(Color.blue);
        btFuncIgual.setForeground(Color.WHITE);
        btFuncIgual.setBounds(230, 235, 0, 0);
        btFuncIgual.setSize(100, 45);
        btFuncIgual.setFont(font1);
        btFuncIgual.addActionListener(this);

        btFuncDecimal = new JButton(",");
        btFuncDecimal.setBounds(120, 235, 0, 0);
        btFuncDecimal.setSize(45, 45);
        btFuncDecimal.setFont(font1);
        btFuncDecimal.addActionListener(this);

        //Visor
        labVisor = new Label();
        strVisor = new String("0");
        labVisor.setText(strVisor);
        labVisor.setFont(font2);
        labVisor.setBackground(Color.black);
        labVisor.setForeground(Color.white);
        labVisor.setBounds(10, 10, 320, 55);

        //adicionando botões ao frane e frane a tela
        frame.add(btNum1);
        frame.add(btNum2);
        frame.add(btNum3);
        frame.add(btNum4);
        frame.add(btNum5);
        frame.add(btNum6);
        frame.add(btNum7);
        frame.add(btNum8);
        frame.add(btNum9);
        frame.add(btNum0);

        frame.add(btOperAdic);
        frame.add(btOperSubt);
        frame.add(btOperMult);
        frame.add(btOperDiv);
        frame.add(btOperPorcent);
        frame.add(btOperRaiz);

        frame.add(btFuncZerar);
        frame.add(btFuncIgual);
        frame.add(btFuncDecimal);
        frame.add(labVisor);

        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

    //métodos Action Listener
    public void actionPerformed(ActionEvent ae) {
        //botão numeros 0 a 9
        //numero 1
        if (ae.getSource() == btNum1) {
            if (labVisor.getText().equals("0")) { // se o visor for 0
                strVisor = "1"; //sai o zero e entra 1
                labVisor.setText(strVisor);
            } else { // se o visor for diferente de 0
                strVisor = strVisor+"1"; // concatena 1 ao visor
                labVisor.setText(strVisor);
            }
        }
        //numero 2
        if (ae.getSource() == btNum2) {
            if (labVisor.getText().equals("0")) { // se o visor for 0
                strVisor = "2"; //sai o zero e entra 1
                labVisor.setText(strVisor);
            } else { // se o visor for diferente de 0
                strVisor = strVisor+"2"; // concatena 1 ao visor
                labVisor.setText(strVisor);
            }
        }
        //numero 3
        if (ae.getSource() == btNum3) {
            if (labVisor.getText().equals("0")) { // se o visor for 0
                strVisor = "3"; //sai o zero e entra 1
                labVisor.setText(strVisor);
            } else { // se o visor for diferente de 0
                strVisor = strVisor+"3"; // concatena 1 ao visor
                labVisor.setText(strVisor);
            }
        }
        //numero 4
        if (ae.getSource() == btNum4) {
            if (labVisor.getText().equals("0")) { // se o visor for 0
                strVisor = "4"; //sai o zero e entra 1
                labVisor.setText(strVisor);
            } else { // se o visor for diferente de 0
                strVisor = strVisor+"4"; // concatena 1 ao visor
                labVisor.setText(strVisor);
            }
        }
        //numero 5
        if (ae.getSource() == btNum5) {
            if (labVisor.getText().equals("0")) { // se o visor for 0
                strVisor = "5"; //sai o zero e entra 1
                labVisor.setText(strVisor);
            } else { // se o visor for diferente de 0
                strVisor = strVisor+"5"; // concatena 1 ao visor
                labVisor.setText(strVisor);
            }
        }
        //numero 6
        if (ae.getSource() == btNum6) {
            if (labVisor.getText().equals("0")) { // se o visor for 0
                strVisor = "6"; //sai o zero e entra 1
                labVisor.setText(strVisor);
            } else { // se o visor for diferente de 0
                strVisor = strVisor+"6"; // concatena 1 ao visor
                labVisor.setText(strVisor);
            }
        }
        //numero 7
        if (ae.getSource() == btNum7) {
            if (labVisor.getText().equals("0")) { // se o visor for 0
                strVisor = "7"; //sai o zero e entra 1
                labVisor.setText(strVisor);
            } else { // se o visor for diferente de 0
                strVisor = strVisor+"7"; // concatena 1 ao visor
                labVisor.setText(strVisor);
            }
        }
        //numero 8
        if (ae.getSource() == btNum8) {
            if (labVisor.getText().equals("0")) { // se o visor for 0
                strVisor = "8"; //sai o zero e entra 8
                labVisor.setText(strVisor);
            } else { // se o visor for diferente de 0
                strVisor = strVisor+"8"; // concatena 8 ao visor
                labVisor.setText(strVisor);
            }
        }
        //numero 9
        if (ae.getSource() == btNum9) {
            if (labVisor.getText().equals("0")) { // se o visor for 0
                strVisor = "9"; //sai o zero e entra 9
                labVisor.setText(strVisor);
            } else { // se o visor for diferente de 0
                strVisor = strVisor+"9"; // concatena 9 ao visor
                labVisor.setText(strVisor);
            }
        }
        //numero 0
        if (ae.getSource() == btNum0) {
            if (labVisor.getText().equals("0")) { // se o visor for 0
                strVisor = "0"; //sai o zero e entra 0
                labVisor.setText(strVisor);
            } else { // se o visor for diferente de 0
                strVisor = strVisor+"0"; // concatena 0 ao visor
                labVisor.setText(strVisor);
            }
        }
        //botão decimal
        if (ae.getSource() == btFuncDecimal) {
                strVisor = strVisor+"."; // concatena , ao visor
                labVisor.setText(strVisor);
        }
        //botão Zerar visor
        if (ae.getSource() == btFuncZerar) {
                strVisor = "0"; // concatena , ao visor
                labVisor.setText(strVisor);
        }

        //operadores aritiméticos
        //adição
        if (ae.getSource() == btOperAdic) {
            //informando que a conta será uma adição
            strOper = "+";
            //salvando o numero digitado e zerando o visor
            doubNum1 = Double.parseDouble(labVisor.getText());
            strVisor = "0";
            labVisor.setText(strVisor);
        }
        //subtração
        if (ae.getSource() == btOperSubt) {
            //informando que a conta será uma subtração
            strOper = "-";
            //salvando o numero digitado e zerando o visor
            doubNum1 = Double.parseDouble(labVisor.getText());
            strVisor = "0";
            labVisor.setText(strVisor);
        }
        //Multiplicação
        if (ae.getSource() == btOperMult) {
            //informando que a conta será uma multiplicação
            strOper = "X";
            //salvando o numero digitado e zerando o visor
            doubNum1 = Double.parseDouble(labVisor.getText());
            strVisor = "0";
            labVisor.setText(strVisor);
        }
        //Divisão
        if (ae.getSource() == btOperDiv) {
            //informando que a conta será uma divisão
            strOper = "/";
            //salvando o numero digitado e zerando o visor
            doubNum1 = Double.parseDouble(labVisor.getText());
            strVisor = "0";
            labVisor.setText(strVisor);
        }

        //total
        if (ae.getSource() == btFuncIgual) {
            //salvando o valor digitado
            doubNum2 = Double.parseDouble(labVisor.getText());
            //se a operação for uma adição
            if (strOper.equals("+")) {
                doubRes = doubNum1 + doubNum2;
                strOper = "";
                strVisor = Double.toString(doubRes); // retornando resultado ao visor
                labVisor.setText(strVisor);
            }
            //se a operação for uma subtração
            if (strOper.equals("-")) {
                doubRes = doubNum1 - doubNum2;
                strOper = "";
                strVisor = Double.toString(doubRes); // retornando resultado ao visor
                labVisor.setText(strVisor);
            }
            //se a operação for uma Multiplicação
            if (strOper.equals("X")) {
                doubRes = doubNum1 * doubNum2;
                strOper = "";
                strVisor = Double.toString(doubRes); // retornando resultado ao visor
                labVisor.setText(strVisor);
            }
            //se a operação for uma divisão
            if (strOper.equals("/")) {
                doubRes = doubNum1 / doubNum2;
                strOper = "";
                strVisor = Double.toString(doubRes); // retornando resultado ao visor
                labVisor.setText(strVisor);
            }
        }
        //porcentagem
        if (ae.getSource() == btOperPorcent) {
            //salvando o valor digitado
            doubNum2 = Double.parseDouble(labVisor.getText());
            //calculando a porcentagem
            doubRes = doubNum1 * (doubNum2/100);
            strOper = "";
            strVisor = Double.toString(doubRes); // retornando resultado ao visor
            labVisor.setText(strVisor);
        }
        //raiz quadrada
        if (ae.getSource() == btOperRaiz) {
            //salvando o valor digitado
            doubNum1 = Double.parseDouble(labVisor.getText());
            doubRes = Math.sqrt(doubNum1);
            strOper = "";
            strVisor = Double.toString(doubRes); // retornando resultado ao visor
            labVisor.setText(strVisor);
        }
    }
}
